package com.company.jt.demo.controller;

import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;

//@Lazy注解注解的作用主要是减少springIOC容器启动的加载时间（无参构造的延迟加载）
//重复请求，内存中只有一份而不会多次创建
@Lazy
@RestController
@RequestMapping("/demo/")
public class DemoController{
    //①无参构造优先于其他方法加载
    public DemoController() {
        System.out.println("DemoController() ---- 构造方法");
    }

    @PostMapping
    public String doCreate(@RequestBody Map<String,Object> map){
        return map.toString()+"已经创建！";
    }
    //需求：统计访问数量
    //J.U.C 包下的线程安全对象(提供了对长整型数据的原子操作，底层CAS算法)
    private AtomicLong conter = new AtomicLong(1);
    @GetMapping("{id}")
    public String doRetrieveById(@PathVariable Integer id) throws InterruptedException {
        String tName = Thread.currentThread().getName();
        System.out.println(conter.getAndIncrement());
        //设置当前线程休眠3秒钟，会有异常，此次学习先抛出即可 --- 目的：由于人的访问太慢，无法模拟并发，因此休眠几个
        TimeUnit.SECONDS.sleep(3);
        return "线程名称："+tName+"查找ID为"+id+"的结果！";
    }
    @PutMapping
    public String doUpdate(@RequestBody Map<String,Object> map){
        return "ID为"+map.toString()+"修改（更新）完毕！";
    }
//  @RequestMapping
    @DeleteMapping("{id}")
    public String doDeleteById(@PathVariable Integer ...id){
        return "ID为"+Arrays.toString(  id)+"的结果被删除！";
    }

}
